// 防抖与节流

/**
 * 防抖
 * 用于持续时不触发回调，停止指定时间后触发回调
 * @param {*} func 回调函数
 * @param {*} delay 停止时间长度 
 */
export function debounce(func, delay = 1000, immediate = false) {
  let timer = null
  return function () {
    if (timer) clearTimeout(timer)
    if (immediate) {
      let callNow = !timer
      timer = setTimeout(() => {
        timer = null
      }, delay)
      if (callNow) func.apply(this, arguments)
    } else {
      timer = setTimeout(() => {
        func.apply(this, arguments)
      }, delay)
    }
  }
}

/**
 * 节流
 * @param {*} func 回调函数
 * @param {*} delay 停止时间长度 
 */
export function throttle (func, delay = 1000) {
  var enterTime = 0
  return function () {
    // 时间戳版
    let nowTime = new Date()
    if (nowTime - enterTime > delay) {
      func.apply(this, arguments)
      enterTime = nowTime
    }
  }
}
